﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace TestImport.Model.DatabaseRepositories
{
    public abstract partial class DatabaseRepository
    {
        /********/
        /* Boek */
        /********/

        public DataTable Boek_GetData()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT boekID, categorieCode, uitgeverCode, isbnNr, titel, auteur, aankoopPrijs, schoolPrijs, huurPrijs, uitputting, aBoek, huurBoek, isBestelbaarBijPlato, verschijndatum, boekStatusCode, boeksoortCode, opmerking, voorraad1, voorraad2, reserve FROM Boek");
        }

        public DataTable Boek_GetDataByDeelTitel(string titel)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@titel", titel);
                dbManager.ExecuteReader(CommandType.Text, "SELECT boekID, categorieCode, uitgeverCode, isbnNr, titel, auteur, aankoopPrijs, schoolPrijs, huurPrijs, uitputting, aBoek, huurBoek, isBestelbaarBijPlato, verschijndatum, boekStatusCode, boeksoortCode, opmerking, voorraad1, voorraad2, reserve FROM Boek WHERE (titel LIKE @titel)");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public DataTable Boek_GetDataByIsbnNr(int isbnNr)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@isbnNr", isbnNr);
                dbManager.ExecuteReader(CommandType.Text, "SELECT boekID, categorieCode, uitgeverCode, isbnNr, titel, auteur, aankoopPrijs, schoolPrijs, huurPrijs, uitputting, aBoek, huurBoek, isBestelbaarBijPlato, verschijndatum, boekStatusCode, boeksoortCode, opmerking, voorraad1, voorraad2, reserve FROM Boek WHERE isbnNr = @isbnNr");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public int Boek_GetAantalByIsbnNr(string isbnNr)
        {
            int aantal = 0;
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@isbnNr", isbnNr);
                aantal = Int32.Parse(dbManager.ExecuteScalar(CommandType.Text, "SELECT COUNT(*) FROM Boek WHERE isbnNr = @isbnNr").ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return aantal;
        }

        public int Boek_GetAantalByCategorieCode(string categorieCode)
        {
            int aantal = 0;
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@categorieCode", categorieCode);
                aantal = Int32.Parse(dbManager.ExecuteScalar(CommandType.Text, "SELECT COUNT(*) FROM Boek WHERE categorieCode = @categorieCode").ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return aantal;
        }

        public DataTable Boek_GetDataByIsInBoeklijst()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT aBoek, aankoopPrijs, auteur, boekID, boekStatusCode, boeksoortCode, categorieCode, huurBoek, huurPrijs, isBestelbaarBijPlato, isbnNr, opmerking, reserve, schoolPrijs, titel, uitgeverCode, uitputting, verschijndatum, voorraad1, voorraad2 FROM Boek WHERE (boekID IN (SELECT DISTINCT boekID FROM BoeklijstItem))");
        }

        public DataTable Boek_GetDataByIsInBoeklijstMetDeelTitel(string titel)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@titel", titel);
                dbManager.ExecuteReader(CommandType.Text, "SELECT aBoek, aankoopPrijs, auteur, boekID, boekStatusCode, boeksoortCode, categorieCode, huurBoek, huurPrijs, isBestelbaarBijPlato, isbnNr, opmerking, reserve, schoolPrijs, titel, uitgeverCode, uitputting, verschijndatum, voorraad1, voorraad2 FROM Boek WHERE (boekID IN (SELECT DISTINCT boekID FROM BoeklijstItem)) AND (titel LIKE @titel)");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public DataTable Boek_GetDataByIsUitBoeklijst()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT aBoek, aankoopPrijs, auteur, boekID, boekStatusCode, boeksoortCode, categorieCode, huurBoek, huurPrijs, isBestelbaarBijPlato, isbnNr, opmerking, reserve, schoolPrijs, titel, uitgeverCode, uitputting, verschijndatum, voorraad1, voorraad2 FROM Boek WHERE (boekID IN (SELECT DISTINCT boekID FROM BoeklijstItem))");
        }

        public int Boek_UpdateCategorie(string nieuweCategorieCode, string oudeCategorieCode)
        {
            int aantal = 0;
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(2);
                dbManager.AddParameters(0, "@nieuweCategorieCode", nieuweCategorieCode);
                dbManager.AddParameters(1, "@oudeCategorieCode", oudeCategorieCode);
                aantal = Int32.Parse(dbManager.ExecuteNonQuery(CommandType.Text, "UPDATE Boek SET uitgeverCode = @nieuweCategorieCode WHERE uitgeverCode = @oudeCategorieCode").ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return aantal;
        }

        public bool Boek_Truncate()
        {
            bool succeed = false;
            try
            {
                dbManager.Open();
                dbManager.ExecuteNonQuery(CommandType.Text, "TRUNCATE TABLE Boek");
                succeed = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return succeed;
        }

    }
}
